home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / fapxtool / src / txl / txldirs.c < prev    next >
C/C++ Source or Header  |  1995-02-11  |  5KB  |  230 lines

  1. /***************
  2. *
  3. * g:\exe\txf\src\txldirs.c
  4. */
  5. #include "txl.h"
  6.  
  7. #define SORT_DATE    1
  8. #define SORT_SIZE    2
  9. #define SORT_NAME    3
  10. #define SORT_EXT    4
  11. #define SORT_FAPX    5
  12. #define PRI_NUM        30
  13.  
  14. int dirsortoption;
  15. PRIORITY kindofpri[PRI_NUM] = {
  16. /*   表示文字列                ディレクトリ/ファイル名 比較文字数 優先順位    */
  17.     {"全体のログ",                    "NIFTYLOG",      8,  1},
  18.     {"テキストメール",                "NIFMAIL",       7,  2},
  19.     {"バイナリメール",                "NIFBMAIL",      8,  3},
  20.     {"NAPLPSメール",                "NAPMAIL",       7,  4},
  21.     {"ホームパーティー",            "HP",            3,  5},
  22.     {"パティオ",                    "PATIO",         6,  6},
  23.     {"FRAV(^^) --- FAPXサポート", "FRAV",    4,  7},
  24.     {"TOWNSフォーラム",        "FTOWNS",        6,  8},
  25.     {"自由行動",                    "FREELOG",       7, 10},
  26.     {"フリーソフトウェア",            "FREESOFT",      8, 12},
  27.     {"FM情報",                    "FMNEWS",        6, 15},
  28.     {"フォーラム",                    "F",             1,  9 + 0x100},
  29.     {"NAPLPS天気予報",                "WEATHER",       7, 11},
  30.     {"課金情報",                    "BILL",          4, 13},
  31.     {"今週のお知らせ",                "NEW",           3, 14},
  32.     {"プロフィール情報",            "PROFILE",       8, 16},
  33.     {"フォーラムメニュー一覧",        "SIGN",          5, 17},
  34.     {"RTNリスト",                "RTN",           4, 18},
  35.     {"ライブラリリスト",            "LIB",           4, 19},
  36.     {"前回ログアウト情報",            "LASTLOG",       7, 20},
  37.     {"メール送信簿",                "MAILSDL",       8, 21},
  38.     {"送信済メール(バックアップ)",    "SENDMAIL",      8, 22},
  39.     {"加入フォーラム一覧",            "MYFORUM.LOG",  12, 23},
  40.     {"ダウンロード記録",            "DOWNLIST.DAT", 13, 24},
  41.     {"アップロード記録",            "UPLDLIST.DAT", 13, 25},
  42.     {"ダウンロード転送レート",        "DOWNRATE.DAT", 13, 26},
  43.     {"アップロード転送レート",        "UPLDRATE.DAT", 13, 27},
  44.     {"通信記録情報",                "CONNECT.DAT",  12, 28},
  45.     {"FAPX管理ディレクトリ",    "SYSTEM",        7, 29},
  46.     {"",                            "",              0, 255},
  47. };
  48.  
  49. int sort_date(struct find_t_s *x, struct find_t_s *y)
  50. {
  51.     int ret = 0;
  52.     int sop = sortoption;
  53.     if (x->attrib & y->attrib & _A_SUBDIR) {
  54.         sop = dirsortoption;
  55.     }
  56.     else if ((x->attrib | y->attrib) & _A_SUBDIR) {
  57.         if (x->attrib & _A_SUBDIR) {
  58.             ret = -1;
  59.         }
  60.         else {
  61.             ret = 1;
  62.         }
  63.         return (ret);
  64.     }
  65.     if (x->wr_date > y->wr_date) {
  66.         ret = -1;
  67.     }
  68.     else if (x->wr_date < y->wr_date) {
  69.         ret = 1;
  70.     }
  71.     else {
  72.         if (x->wr_time > y->wr_time) {
  73.             ret = -1;
  74.         }
  75.         else if (x->wr_time < y->wr_time) {
  76.             ret = 1;
  77.         }
  78.     }
  79.     if (sop < 0) {
  80.         ret = -(ret);
  81.     }
  82.     return (ret);
  83. }
  84.  
  85. int sort_size(struct find_t_s *x, struct find_t_s *y)
  86. {
  87.     int ret = 0;
  88.     int sop = sortoption;
  89.     if (x->attrib & y->attrib & _A_SUBDIR) {
  90.         sop = dirsortoption;
  91.     }
  92.     else if ((x->attrib | y->attrib) & _A_SUBDIR) {
  93.         if (x->attrib & _A_SUBDIR) {
  94.             ret = -1;
  95.         }
  96.         else {
  97.             ret = 1;
  98.         }
  99.         return (ret);
  100.     }
  101.     if (x->size > y->size) {
  102.         ret = -1;
  103.     }
  104.     else if (x->size < y->size) {
  105.         ret = 1;
  106.     }
  107.     if (sop < 0) {
  108.         ret = -(ret);
  109.     }
  110.     return (ret);
  111. }
  112.  
  113. int sort_name(struct find_t_s *x, struct find_t_s *y)
  114. {
  115.     int ret = 0;
  116.     int sop = sortoption;
  117.     if (x->attrib & y->attrib & _A_SUBDIR) {
  118.         sop = dirsortoption;
  119.     }
  120.     else if ((x->attrib | y->attrib) & _A_SUBDIR) {
  121.         if (x->attrib & _A_SUBDIR) {
  122.             ret = -1;
  123.         }
  124.         else {
  125.             ret = 1;
  126.         }
  127.         return (ret);
  128.     }
  129.     ret = strcmp(x->name, y->name);
  130.     if (sop > 0) {
  131.         ret = -(ret);
  132.     }
  133.     return (ret);
  134. }
  135.  
  136. int sort_ext(struct find_t_s *x, struct find_t_s *y)
  137. {
  138.     int ret = 0;
  139.     char *xperiod = strchr(x->name, '.');
  140.     char *yperiod = strchr(y->name, '.');
  141.     int sop = sortoption;
  142.     if (x->attrib & y->attrib & _A_SUBDIR) {
  143.         sop = dirsortoption;
  144.     }
  145.     else if ((x->attrib | y->attrib) & _A_SUBDIR) {
  146.         if (x->attrib & _A_SUBDIR) {
  147.             ret = -1;
  148.         }
  149.         else {
  150.             ret = 1;
  151.         }
  152.         return (ret);
  153.     }
  154.     if ((xperiod == NULL) && (yperiod == NULL)) {
  155.         ret = sort_name(x, y);
  156.         if (sortoption < 0) {
  157.             ret = -(ret);
  158.         }
  159.     }
  160.     else if (xperiod == NULL) {
  161.         ret = -1;
  162.     }
  163.     else if (yperiod == NULL) {
  164.         ret = 1;
  165.     }
  166.     else {
  167.         ret = -(strcmp(xperiod, yperiod));
  168.     }
  169.     if (sop < 0) {
  170.         ret = -(ret);
  171.     }
  172.     return (ret);
  173. }
  174.  
  175. PRIORITY *howpri(struct find_t_s *z)
  176. {
  177.     int i;
  178.     for (i = 0; i < PRI_NUM; i++) {
  179.         if (strncmp(z->name, kindofpri[i].name, kindofpri[i].cmp) == 0) {
  180.             break;
  181.         }
  182.     }
  183.     return (&(kindofpri[i]));
  184. }
  185.  
  186. int sort_fapx(struct find_t_s *x, struct find_t_s *y)
  187. {
  188.     int ret = 0;
  189.     PRIORITY *xpri, *ypri;
  190.     int sop = sortoption;
  191.     if (x->attrib & y->attrib & _A_SUBDIR) {
  192.         sop = dirsortoption;
  193.     }
  194.     else if ((x->attrib | y->attrib) & _A_SUBDIR) {
  195.         if (x->attrib & _A_SUBDIR) {
  196.             ret = -1;
  197.         }
  198.         else {
  199.             ret = 1;
  200.         }
  201.         return (ret);
  202.     }
  203.  
  204.     xpri = howpri(x);
  205.     ypri = howpri(y);
  206.     if (((xpri->pri) & 0x0ff) > ((ypri->pri) & 0x0ff)) {
  207.         ret = -1;
  208.     }
  209.     else if (((xpri->pri) & 0x0ff) < ((ypri->pri) & 0x0ff)) {
  210.         ret = 1;
  211.     }
  212.     if (sop < 0) {
  213.         ret = -(ret);
  214.     }
  215.     if (ret == 0) {
  216.         ret = sort_name(x, y);
  217.     }
  218.     return (ret);
  219. }
  220.  
  221. int (*qsort_func_tbl[6])(struct find_t_s *x, struct find_t_s *y) = {
  222.     NULL,
  223.     sort_date,
  224.     sort_size,
  225.     sort_name,
  226.     sort_ext,
  227.     sort_fapx,
  228. };
  229.  
  230.